package com.javasea.netty.har.client.netty;

import com.javasea.netty.har.client.utils.TrayOperator;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelFutureListener;
import io.netty.channel.EventLoop;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;

/**
 * @Description 连接监听器，如果启动客户端没连接上服务端，那么由这里定时发起重连
 * @Author longxiaonan@163.com
 * @Date 15:52 2021/11/29 0029
 **/
@Slf4j
public class ConnectionListener implements ChannelFutureListener {

    @Override
    public void operationComplete(ChannelFuture channelFuture) throws Exception {
        final EventLoop loop = channelFuture.channel().eventLoop();
        if(channelFuture.isSuccess()){
            log.info("连接服务端[成功]!");
        }else{
            log.debug("连接服务端[失败], 开始重连处理!");
            TrayOperator.trayMessage("客户端连接服务端[失败]!");
        }
        // 当启动客户端时，连接服务端失败后执行定时重连操作
        loop.scheduleAtFixedRate(() -> {
            if (!PrinterClient.cf.isSuccess()) {
                log.info("连接服务端[失败], 开始重连!");
                PrinterClient.doConnect();
            } else {
//                客户端和服务端正常连接时，关闭服务端，仍然会执行到这里
//                log.info("连接服务器[成功], 无需重连!");
            }
        }, 5L, 5L, TimeUnit.SECONDS);
    }
}
